#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include<unistd.h>

#include <sys/types.h>
#include <sys/wait.h>
    
int addToTarget(int from,int to)
{
  int sum=0;
  for(int i=from;i<to;++i)
  {
    sum+=i;
  }
 exit(12); //如果直接使用exit，sum不会被返回
 //  return sum;  //执行return 表示代码正确退出


}

int main()
{
  ////////////////////////进程退出码///////////////
  /*    
  pid_t id =fork();
  if(id==0)
  {
    //child
    int cnt=5;
    while(cnt)
    {
      printf("child process id :%d  ppid: %d   cnt %d\n",getpid(),getppid(),cnt);
      cnt--;
      sleep(1);
    }
    //运行完
    //1、代码完结果对
    //2、代码完，结果不对
    //异常
    //3、代码没跑完，出异常
    int a=0;
    int b=0;
    b/=a;
    exit(10);  //这后面exit()可以自定义返回值是多少，在根据自定义的参数确定错误
  }
  //parent
  //sleep(10);
  int status=0;  //在waitpid中是低16位用来做输出型参数，有自己的位图结构
  //pid_t pd=wait(NULL);

  pid_t pd=waitpid(id,&status,0);
  if(id>0)
  {
  //sign number 是status的低7位，用来表示代码是否正常退出，0表示正常退出，其余的kill -l查看 
  //child exit code 是status的低16位的高8位，是自己自定义的错误退出码，根据退出码查询对应的错误
  printf("wait success %d,sign number:%d child exit code: %d   \n",pd,(status&0x7f),(status>>8)&0xff);
  }




 // printf("hello world");
 // sleep(2);*/ 
 //
 

//如何衡量代码执行得如何，通过进程退出码

int num = addToTarget(0,100);
printf("num=%d\n",num);


return 0;
/*  if(num==5050)
    return 0;
  else 
    return 1;*/
 //退出码得意义，0：success !0 标识失败，具体是几表示不同的错误
 //

  return 0;
}

